home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / splitit.zip / SPLITIT.C < prev    next >
Text File  |  1992-03-21  |  31KB  |  1,193 lines

  1. /* Splitit by Bill Buckels 1992 */
  2. /* Written in MIX POWER C       */
  3. /* LARGE memory MODEL           */
  4.  
  5. /* a binary file splitter. */
  6. /* note that this utility can create damage if used improperly   */
  7.  
  8. /* January 1992 */
  9. /* I have taken what I consider reasonable precautions and since */
  10. /* I really must get on with life I have deemed this utility     */
  11. /* fit for use by a careful public. */
  12.  
  13. /* February 1992 */
  14. /* The speed of reading and writing Binary Files byte by byte is */
  15. /* unacceptable and is therefore changed. */
  16.  
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include <dos.h>
  20. #include <bios.h>
  21. #include <conio.h>
  22. #include <direct.h>
  23. #include <fcntl.h>
  24. #include <malloc.h>
  25. #include <io.h>
  26. #include <stdlib.h>
  27.  
  28.  
  29. /* a group of handy definitions */
  30.  
  31. #define BLACK   0
  32. #define BLUE    1
  33. #define GREEN   2
  34. #define CYAN    3
  35. #define RED     4
  36. #define MAGENTA 5
  37. #define BROWN   6
  38. #define WHITE   7
  39. #define GRAY      8
  40. #define LBLUE     9
  41. #define LGREEN    10
  42. #define LCYAN     11
  43. #define LRED      12
  44. #define LMAGENTA  13
  45. #define YELLOW    14
  46. #define BWHITE    15
  47.  
  48. #define ESCAPE  '\x1b'
  49. #define CGA  3
  50. #define HERCULES 99
  51.  
  52. int ADAPTER = CGA;
  53.  
  54. #define BLANK     32
  55. #define FAT       219
  56.  
  57.  
  58. #define ENTERKEY   '\x0d' /* character generated by the Enter Key          */
  59. #define ESCKEY     '\x1b' /* character generated by the Esc key            */
  60. #define FUNCKEY    '\x00' /* first character generated by function keys    */
  61. #define UPARROW    'H'    /* second character generated by up-arrow key    */
  62. #define DOWNARROW  'P'    /* second character generated by down-arrow key  */
  63. #define LTARROW    'K'    /* second character generated by left-arrow key  */
  64. #define RTARROW    'M'    /* second character generated by right-arrow key */
  65. #define PGUP       'I'    /* second character generated by page up key     */
  66. #define PGDOWN     'Q'    /* second character generated by page down key   */
  67.  
  68. /* starting at character 59*/
  69. #define F1         ';'    /* second character generated by fkeys */
  70. #define F2         '<'
  71. #define F3         '='
  72. #define F4         '>'
  73. #define F5         '?'
  74. #define F6         '@'
  75. #define F7         'A'
  76. #define F8         'B'
  77. #define F9         'C'
  78. #define F10        'D'
  79. /* ending at character 68  */
  80.  
  81. #define CRETURN '\x0d'
  82. #define LFEED   '\x0A'
  83. #define CTRLZ   '\x1a'
  84. #define DELETE  '\x7f'
  85.  
  86. #define SINGLE    218
  87. #define DOUBLE    201
  88.  
  89. char wildfiles[300][15];
  90.  
  91. int filecords[84][2]=
  92. {
  93.     2,  4,  2,  23,  2, 42,  2, 61,
  94.     3,  4,  3,  23,  3, 42,  3, 61,
  95.     4,  4,  4,  23,  4, 42,  4, 61,
  96.     5,  4,  5,  23,  5, 42,  5, 61,
  97.     6,  4,  6,  23,  6, 42,  6, 61,
  98.     7,  4,  7,  23,  7, 42,  7, 61,
  99.     8,  4,  8,  23,  8, 42,  8, 61,
  100.     9,  4,  9,  23,  9, 42,  9, 61,
  101.     10, 4, 10,  23, 10, 42, 10, 61,
  102.     11, 4, 11,  23, 11, 42, 11, 61,
  103.     12, 4, 12,  23, 12, 42, 12, 61,
  104.     13, 4, 13,  23, 13, 42, 13, 61,
  105.     14, 4, 14,  23, 14, 42, 14, 61,
  106.     15, 4, 15,  23, 15, 42, 15, 61,
  107.     16, 4, 16,  23, 16, 42, 16, 61,
  108.     17, 4, 17,  23, 17, 42, 17, 61,
  109.     18, 4, 18,  23, 18, 42, 18, 61,
  110.     19, 4, 19,  23, 19, 42, 19, 61,
  111.     20, 4, 20,  23, 20, 42, 20, 61,
  112.     21, 4, 21,  23, 21, 42, 21, 61,
  113.     22, 4, 22,  23, 22, 42, 22, 61};
  114.  
  115.  
  116. int getfiles(char *filetype)
  117. {
  118.  
  119.     char buffer[15];
  120.     int wildcounter=0;
  121.  
  122.     struct ffblk wild_card;
  123.  
  124.     memset(wildfiles,0,sizeof(wildfiles));
  125.     sprintf(buffer,"*.%s",filetype);
  126.  
  127.     if(findfirst(buffer,&wild_card,FA_NORMAL)==0)
  128.     {
  129.         strcpy(wildfiles[wildcounter],wild_card.ff_name);
  130.         wildcounter++;
  131.  
  132.     while(findnext(&wild_card)==0){
  133.            if(wildcounter<300)
  134.            {
  135.            strcpy(wildfiles[wildcounter],wild_card.ff_name);
  136.            wildcounter++;
  137.            }
  138.            }
  139.            }
  140.            if(wildcounter>1)qsort(wildfiles,wildcounter,15,strcmp);
  141. return wildcounter;
  142. }
  143.  
  144.  
  145. void cursoroff(void)
  146. {
  147.    union REGS regs;
  148.  
  149.    regs.h.ah = 0x01;
  150.    regs.x.cx = 0x2000;
  151.    int86(0x10,®s,®s);
  152. }
  153.  
  154.  
  155.  
  156. void cursoron(void)
  157. {
  158.    union REGS regs;
  159.  
  160.    regs.h.ah = 0x01;
  161.    regs.x.cx = 0x0607;
  162.    int86(0x10,®s,®s);
  163. }
  164.  
  165.  
  166. void cls(int BACK,int FRONT)
  167. {
  168.     union REGS reg;
  169.  
  170.     reg.h.ah = 6;
  171.     reg.h.al = 0;
  172.     reg.h.ch = 0;
  173.     reg.h.cl = 0;
  174.     reg.h.dh = 24;
  175.     reg.h.dl = 79;
  176.     reg.h.bh = (BACK << 4) + FRONT;
  177.     int86(0x10, ®, ®);
  178. }
  179.  
  180.  
  181. void DMC(int Row, int Column, unsigned BYTE, int BACK, int FRONT, int QUANT)
  182. {
  183.     /*  DMA replacement for writechs function */
  184.  
  185.     unsigned segment= 0xB000, offset;
  186.     int One_Too_Many = (QUANT+1);
  187.     int i, Attribute;
  188.  
  189.     Attribute = (BACK << 4) + FRONT;
  190.  
  191.     if(ADAPTER!=HERCULES)segment = 0xB800;    /* CGA or Equivalent */
  192.     offset = 160 * Row + 2 * Column ;
  193.     for (i=1; i< One_Too_Many ; i++){
  194.         poke(segment,offset, BYTE|Attribute<<8);
  195.         offset+=2;
  196.         }
  197. }
  198.  
  199.  
  200. void DMM(char *String, int Row, int Column, int BACK, int FRONT)
  201. {
  202.     /*  DMA replacement for puts
  203.         centre justified string    */
  204.  
  205.     unsigned Character, segment=0xB000, offset;
  206.     int Attribute;
  207.  
  208.     Attribute = (BACK << 4) + FRONT;
  209.  
  210.     Column =   ((Column+1)-(.5*(strlen(String))));
  211.  
  212.     if(ADAPTER != HERCULES)segment = 0xB800;    /* CGA or Equivalent */
  213.     offset = 160 * Row + 2 * Column ;
  214.     while ((Character = *String++)!=0){
  215.         if(Character!='\n'){
  216.         poke(segment,offset,Character|Attribute<<8);
  217.         offset+=2;
  218.         }
  219.         }
  220. }
  221.  
  222.  
  223. void DML(char *String, int Row, int Column, int BACK, int FRONT)
  224. {
  225.     /*  DMA replacement for puts
  226.         left justified string    */
  227.     unsigned Character, segment=0xB000, offset;
  228.     int Attribute;
  229.  
  230.     Attribute = (BACK << 4) + FRONT;
  231.  
  232.     if(ADAPTER!=HERCULES)segment = 0xB800; /* CGA or Equivalent */
  233.     offset = 160 * Row + 2 * Column ;
  234.     while ((Character = *String++)!=0){
  235.         if(Character!='\n'){
  236.         poke(segment,offset, Character|Attribute<<8);
  237.         offset +=2;
  238.         }
  239.     }
  240. }
  241.  
  242.  
  243. void BORDERBOX(int *cor,int fore, int bk,unsigned char BRDR)
  244. {
  245.  
  246. int trow=cor[0],tcol=cor[1],brow=cor[2],bcol=cor[3];
  247.     /* draws an outline only using a specified border character */
  248. int index;
  249. int homerow = (brow-1);
  250. int homecol = (tcol+1);
  251. int linelength = ((bcol) - (tcol+1));
  252.  
  253. int TLcorner,TRcorner,BLcorner,BRcorner,HORT,VERT;
  254.  
  255.           switch(BRDR){
  256.                case DOUBLE: {
  257.                             TLcorner = 201;
  258.                             TRcorner = 187;
  259.                             BLcorner = 200;
  260.                             BRcorner = 188;
  261.                             HORT = 205;
  262.                             VERT = 186;
  263.                             break;
  264.                         }
  265.                case SINGLE: {
  266.                             TLcorner = 218;
  267.                             TRcorner = 191;
  268.                             BLcorner = 192;
  269.                             BRcorner = 217;
  270.                             HORT = 196;
  271.                             VERT = 179;
  272.                             break;
  273.                         }
  274.                default:    {
  275.                             TLcorner = BRDR;
  276.                             TRcorner = BRDR;
  277.                             BLcorner = BRDR;
  278.                             BRcorner = BRDR;
  279.                             HORT = BRDR;
  280.                             VERT = BRDR;
  281.                         }
  282.             }
  283.    DMC(trow,tcol,TLcorner,bk,fore,1);         /* top */
  284.    DMC(trow,homecol,HORT,bk,fore,linelength);
  285.    DMC(trow,bcol,TRcorner,bk,fore,1);
  286.    for (index = (trow+1); index < brow; index++){
  287.        DMC(index,tcol,VERT,bk,fore,1);
  288.        DMC(index,bcol,VERT,bk,fore,1);
  289.        }
  290.    DMC(brow,tcol,BLcorner,bk,fore,1);
  291.    DMC(brow,homecol,HORT,bk,fore,linelength);
  292.    DMC(brow,bcol,BRcorner,bk,fore,1);        /* bottom */
  293. }
  294.  
  295.  
  296.  
  297. void getadaptertype(void)
  298. {
  299.     if(((biosequip() >>4) &3) <3)ADAPTER=CGA;
  300.     else ADAPTER=HERCULES;
  301.  
  302. }
  303.  
  304.  
  305.  
  306.  
  307. int splitit(char *name,
  308.             unsigned long checksum,
  309.             unsigned long target,
  310.             unsigned status)
  311. {
  312.     int fh,fh2;
  313.